package sv.gob.mtps.colectivas.controller;

import java.util.Map;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import sv.gob.mtps.colectivas.model.CatCausaSolicitud;
import sv.gob.mtps.colectivas.model.CatResultado;
import sv.gob.mtps.colectivas.model.CatTipoSolicitud;
import sv.gob.mtps.colectivas.service.CatalogosService;
import sv.gob.mtps.colectivas.service.FindService;

@Controller
public class CatalogosController {
	
	@Autowired
	FindService findService;
	
	@Autowired
	CatalogosService catalogosService;
	
	@RequestMapping("/admin/showTipoSolicitudes")
	public String listTipoSolicitudes(Map<String, Object> map) {
		map.put("tipo", new CatTipoSolicitud());
		map.put("tipoList", findService.listTipoSolictudes());
		return "/admin/tipoSolicitudes";
	}
	
	@RequestMapping(value = "/admin/addTipoSolicitudes", method = RequestMethod.POST)
	public String addTipoSolicitudes(@ModelAttribute("tipo") @Valid CatTipoSolicitud catTipoSolicitud,BindingResult result) {

		if (!result.hasErrors()) {
			try{
				catalogosService.addTipoSolicitud(catTipoSolicitud);
				System.out.println(catTipoSolicitud.getIdTipoSolicitud() + " - " + catTipoSolicitud.getTipoSolicitud());
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException e2){
				e2.printStackTrace();
			}
			
			return "redirect:/admin/showTipoSolicitudes";
		} else {
			return "redirect:/admin/index";
		}

	}
	
	@RequestMapping(value = "/admin/editTipoSolicitudes", method = RequestMethod.POST)
	public String updateTipoSolicitudes(@ModelAttribute("tipo") @Valid CatTipoSolicitud catTipoSolicitud,BindingResult result) {

		if (!result.hasErrors()) {
			try{
				catalogosService.updateTipoSolicitud(catTipoSolicitud);
				System.out.println(catTipoSolicitud.getIdTipoSolicitud() + " - " + catTipoSolicitud.getTipoSolicitud());
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException e2){
				e2.printStackTrace();
			}
			
			return "redirect:/admin/showTipoSolicitudes";
		} else {
			return "redirect:/admin/index";
		}

	}
	
	@RequestMapping(value = "/admin/deleteTipoSolicitudes", method = RequestMethod.POST)
	public String delTipoSolicitudes(@ModelAttribute("tipo") @Valid CatTipoSolicitud catTipoSolicitud,BindingResult result) {

		if (!result.hasErrors()) {
			try{
				catalogosService.deleteTipoSolicitud(catTipoSolicitud.getIdTipoSolicitud());
				System.out.println(catTipoSolicitud.getIdTipoSolicitud() + " - " + catTipoSolicitud.getTipoSolicitud());
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException e2){
				e2.printStackTrace();
			}
			
			return "redirect:/admin/showTipoSolicitudes";
		} else {
			return "redirect:/admin/index";
		}

	}
	
	
	@RequestMapping("/admin/showCausaSolicitudes")
	public String listCausaSolicitudes(Map<String, Object> map) {
		map.put("causa", new CatCausaSolicitud());
		map.put("causaList", findService.listCausaSolicitudes());
		return "/admin/causaSolicitudes";
	}
	
	@RequestMapping(value = "/admin/addCausaSolicitudes", method = RequestMethod.POST)
	public String addCausaSolicitudes(@ModelAttribute("causa") @Valid CatCausaSolicitud catCausaSolicitud,BindingResult result) {

		if (!result.hasErrors()) {
			try{
				catalogosService.addCausaSolicitud(catCausaSolicitud);
				
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException e2){
				e2.printStackTrace();
			}
			
			return "redirect:/admin/showCausaSolicitudes";
		} else {
			return "redirect:/admin/index";
		}
		
		

	}
	
	@RequestMapping(value = "/admin/editCausaSolicitudes", method = RequestMethod.POST)
	public String editCausaSolicitudes(@ModelAttribute("causa") @Valid CatCausaSolicitud catCausaSolicitud,BindingResult result) {

		if (!result.hasErrors()) {
			try{
				catalogosService.updateCausaSolicitud(catCausaSolicitud);
				System.out.println("updated " + catCausaSolicitud.getIdCausaSolicitud());
				
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException e2){
				e2.printStackTrace();
			}
			
			return "redirect:/admin/showCausaSolicitudes";
		} else {
			return "redirect:/admin/index";
		}
	
	
	}
	
	@RequestMapping(value = "/admin/deleteCausaSolicitudes", method = RequestMethod.POST)
	public String delCausaSolicitudes(@ModelAttribute("causa") @Valid CatCausaSolicitud catCausaSolicitud,BindingResult result) {

		if (!result.hasErrors()) {
			try{
				catalogosService.deleteCausaSolicitud(catCausaSolicitud.getIdCausaSolicitud());
				System.out.println("deleted " + catCausaSolicitud.getIdCausaSolicitud());
				
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException e2){
				e2.printStackTrace();
			}
			
			return "redirect:/admin/showCausaSolicitudes";
		} else {
			return "/admin/causaSolicitudes";
		}
	
	
	}
	
	
	//
	
	@RequestMapping("/admin/showCatResultado")
	public String showCatResultado(Map<String, Object> map) {
		map.put("result", new CatResultado());
		map.put("resultadoList", catalogosService.listResultados());
		return "/admin/resultado";
	}
	
	@RequestMapping(value = "/admin/addCatResultado", method = RequestMethod.POST)
	public String addCatResultado(@ModelAttribute("result") @Valid CatResultado catResultado, BindingResult result) {
		if(!result.hasErrors()){
			catalogosService.addResultado(catResultado);
			return "redirect:/admin/showCatResultado";
		}else{
			return "/admin/resultado";
		}
	}
	
	@RequestMapping(value = "/admin/updateCatResultado", method = RequestMethod.POST)
	public String updateCatResultado(@ModelAttribute("result") @Valid CatResultado catResultado, BindingResult result) {
		if(!result.hasErrors()){
			catalogosService.updateResultado(catResultado);
			return "redirect:/admin/showCatResultado";
		}else{
			return "/admin/resultado";
		}
	}
	
	@RequestMapping(value = "/admin/deleteCatResultado", method = RequestMethod.POST)
	public String deleteCatResultado(@ModelAttribute("result") @Valid CatResultado catResultado, BindingResult result) {
		if(!result.hasErrors()){
			catalogosService.deleteResultado(catResultado.getIdResultado());
			return "redirect:/admin/showCatResultado";
		}else{
			return "/admin/resultado";
		}
	}

}
